; DeclsInfo:
; *==============*
; *____Bullet____*
; *==============*

; DeclsInfo:btVector3

;DeleteV3 ( v_V3ptr ) : "_DeleteV3@4"
;NewV3 % ( x# , y# , z#  ) : "_NewV3@12"
;V3add % ( v1_V3ptr, v2_V3ptr ) : "_V3add@8"
;V3sub % ( v1_V3ptr, v2_V3ptr ) : "_V3sub@8"
;V3x # ( v_V3ptr ) : "_V3x@4"
;V3y # ( v_V3ptr ) : "_V3y@4"
;V3z # ( v_V3ptr ) : "_V3z@4"
;V3w # ( v_V3ptr ) : "_V3w@4"
;V3set ( v_V3ptr, x# , y# , z#  ) : "_V3set@16"
;V3setX ( v_V3ptr, x#  ) : "_V3setX@8"
;V3setY ( v_V3ptr, y#  ) : "_V3setY@8"
;V3setZ ( v_V3ptr, z#  ) : "_V3setZ@8"
;V3setW ( v_V3ptr, w#  ) : "_V3setW@8"
;V3setMax ( v1_V3ptr, v2_V3ptr ) : "_V3setMax@8"
;V3setMin ( v1_V3ptr, v2_V3ptr ) : "_V3setMin@8"
;V3getSkewSymmetricMatrix ( v_V3ptr, v0_V3ptr, v1_V3ptr, v2_V3ptr ) : "_V3getSkewSymmetricMatrix@16"
;V3setZero ( v_V3ptr ) : "_V3setZero@4"
;V3isZero % ( v_V3ptr ) : "_V3isZero@4"
;V3fuzzyZero % ( v_V3ptr ) : "_V3fuzzyZero@4"
;V3equal % ( v_V3ptr, v2_V3ptr ) : "_V3equal@8"
;V3notEqual % ( v_V3ptr, v2_V3ptr ) : "_V3notEqual@8"
;V3mulScalar % ( v_V3ptr, f#  ) : "_V3mulScalar@8"
;V3divScalar % ( v_V3ptr, f#  ) : "_V3divScalar@8"
;V3dot # ( v_V3ptr, v2_V3ptr ) : "_V3dot@8"
;V3length2 # ( v_V3ptr ) : "_V3length2@4"
;V3length # ( v_V3ptr ) : "_V3length@4"
;V3distance2 # ( v_V3ptr, v2_V3ptr ) : "_V3distance2@8"
;V3distance # ( v_V3ptr, v2_V3ptr ) : "_V3distance@8"
;V3safeNormalize % ( v_V3ptr ) : "_V3safeNormalize@4"
;V3normalize % ( v_V3ptr ) : "_V3normalize@4"
;V3normalized % ( v_V3ptr ) : "_V3normalized@4"
;V3rotate % ( v_V3ptr, wAxis_V3ptr, angle#  ) : "_V3rotate@12"
;V3angle # ( v_V3ptr, v2_V3ptr ) : "_V3angle@8"
;V3absolute % ( v_V3ptr ) : "_V3absolute@4"
;V3cross % ( v_V3ptr, v2_V3ptr ) : "_V3cross@8"
;V3triple # ( v_V3ptr, v1_V3ptr, v2_V3ptr ) : "_V3triple@12"
;V3minAxis % ( v_V3ptr ) : "_V3minAxis@4"
;V3maxAxis % ( v_V3ptr ) : "_V3maxAxis@4"
;V3furthestAxis % ( v_V3ptr ) : "_V3furthestAxis@4"
;V3closestAxis % ( v_V3ptr ) : "_V3closestAxis@4"
;V3setInterpolate3 ( v_V3ptr, v0_V3ptr, v1_V3ptr, rt#  ) : "_V3setInterpolate3@16"
;V3lerp ( v_V3ptr, v2_V3ptr, t#  ) : "_V3lerp@12"
;V3yaw # ( v_V3ptr ) : "_V3yaw@4"
;V3pitch # ( v_V3ptr ) : "_V3pitch@4"
;V3ToString $ ( v_V3ptr ) : "_V3ToString@4"

; DeclsInfo:btVector3 List

;DeleteV3List ( list_ptr ) : "_DeleteV3List@4"
;DeleteV3Link ( lnk_ptr ) : "_DeleteV3Link@4"
;SetV3Vector ( lnk_ptr, vector_V3ptr ) : "_SetV3Vector@8"
;SetV3Link ( lnk_ptr, x# , y# , z#  ) : "_SetV3Link@16"
;V3LinkX # ( lnk_ptr ) : "_V3LinkX@4"
;V3LinkY # ( lnk_ptr ) : "_V3LinkY@4"
;V3LinkZ # ( lnk_ptr ) : "_V3LinkZ@4"
;NewV3List % ( ) : "_NewV3List@0"
;CopyV3List % ( List_ptr ) : "_CopyV3List@4"
;V3InsertAfter % ( lnk_ptr, after_ptr ) : "_V3InsertAfter@8"
;V3InsertBefore % ( lnk_ptr, before_ptr ) : "_V3InsertBefore@8"
;V3AddLast % ( list_ptr, vector_V3ptr ) : "_V3AddLast@8"
;V3AddFirst % ( list_ptr, vector_V3ptr ) : "_V3AddFirst@8"
;V3ListCount % ( list_ptr ) : "_V3ListCount@4"
;V3Contains % ( list_ptr, vector_V3ptr ) : "_V3Contains@8"
;V3ListIsEmpty % ( list_ptr ) : "_V3ListIsEmpty@4"
;V3First % ( list_ptr ) : "_V3First@4"
;V3Last % ( list_ptr ) : "_V3Last@4"
;V3After % ( link_ptr ) : "_V3After@4"
;V3Before % ( link_ptr ) : "_V3Before@4"
;V3Get % ( link_ptr ) : "_V3Get@4"


Graphics 800,600,0,2
SetBuffer BackBuffer()

Local v1	=	NewV3(1,2,3)
Local v2	=	NewV3(2,-1,1)
Local v3	=	NewV3(1,2,3)
Print "v1    : "+V3X(v1)+" "+V3Y(v1)+" "+V3Z(v1)
Print "v2    : "+V3X(v2)+" "+V3Y(v2)+" "+V3Z(v2)
Print "v3    : "+V3X(v3)+" "+V3Y(v3)+" "+V3Z(v3)
Print "v1=v2 : "+V3equal(v1, v2)
Print "v1=v3 : "+V3equal(v1, v3)
Print "v1<>v2 : "+V3notEqual(v1, v2)
Print "v1<>v3 : "+V3notequal(v1, v3)
V3set(v1,-2,1,.5)
DeleteV3(v2)
v2 = V3Cross%(v1,v3)
Local v4=V3normalized(v1)
Print "v1    : "+V3X(v1)+" "+V3Y(v1)+" "+V3Z(v1)
Print "v2    : "+V3X(v2)+" "+V3Y(v2)+" "+V3Z(v2)
Print "v3    : "+V3X(v3)+" "+V3Y(v3)+" "+V3Z(v3)
Print "v4    : "+V3X(v4)+" "+V3Y(v4)+" "+V3Z(v4)

Print "v1 Mag= "+V3length(v1)
Print "v1 SMag="+V3length2(v1)
Print "v1 Dot= "+V3Dot#(v1,v3)
Print "v1^v2 = "+V3Angle(v1,v2)
V3normalize(v1)
V3normalize(v2)
V3normalize(v3)
Print "mag v1, v2 and v3"
Print "v1    : "+V3X(v1)+" "+V3Y(v1)+" "+V3Z(v1)
Print "v2    : "+V3X(v2)+" "+V3Y(v2)+" "+V3Z(v2)
Print "v3    : "+V3X(v3)+" "+V3Y(v3)+" "+V3Z(v3)
Print "v1^v2 = "+V3Angle(v1,v2)
Print "v1 pit: "+V3Pitch(v1)
Print "v1 yaw: "+V3Yaw(v1)
V3setZero(v1)
Print "v1    : "+V3X(v1)+" "+V3Y(v1)+" "+V3Z(v1)



Local list1 = NewV3List()
Local l1=V3AddLast(list1,NewV3(0,0,0))
	V3set V3Get(l1), 1,.5,2
Local l2=V3AddLast(list1,0)
	SetV3Vector l2,v3
Local list2 = CopyV3List(list1)

DeleteV3List list1

Local l=V3First(list2)
While l
	Print V3LinkX(l)+" "+V3LinkY(l)+" "+V3LinkZ(l)
	l=V3After(l)
Wend
WaitKey
End


;~IDEal Editor Parameters:
;~C#Blitz3D